package com.biwin.module.org.api.service;

import com.biwin.module.org.api.dto.SystemUserDto;
import com.biwin.module.org.api.vo.SystemUserVo;
import com.biwin.module.orm.api.service.CurdService;

import java.io.Serializable;

/**
 * TODO
 *
 * @author biwin
 * @since 0.0.1
 */
public interface ISystemUserService<T, V, ID extends Serializable> extends CurdService<T, V, ID> {
    /**
     * 根据 account 查询系统用户信息
     *
     * @param username
     * @return SystemUserVo 系统用户信息
     */
    SystemUserVo findByAccount(String username);

    /**
     * 校验指定登录账号是否存在
     *
     * @param username 登录账号
     * @return true: 存在, false: 不存在
     */
    boolean checkUserExist(String username);

    /**
     * 更新指定账户的密码
     *
     * @param userId
     * @param newPassword
     * @return
     */
    boolean updatePassword(Long userId, String newPassword);

    /**
     * 更新指定账户的登录错误次数
     *
     * @param userId
     * @param faultNum
     * @return
     */
    boolean updatePasswordFaultNum(Long userId, Integer faultNum);

    /**
     * 更新制定账户的登陆时间
     *
     * @param userId
     * @return
     */
    boolean updateLoginDate(Long userId);

    /**
     * 锁定指定账户
     *
     * @param userId
     * @return
     */
    boolean lock(Long userId);

    /**
     * 解锁指定账户
     *
     * @param userId
     * @return
     */
    boolean unlock(Long userId);

    /**
     * 禁用用户
     *
     * @param userId
     * @return
     */
    boolean disable(Long userId);

    /**
     * 启用用户
     *
     * @param userId
     * @return
     */
    boolean enable(Long userId);

    /**
     * 添加 SystemUser 用户
     *
     * @param systemUserDto
     * @return
     */
    SystemUserVo add(SystemUserDto systemUserDto);

    /**
     * 修改 SystemUser 用户
     *
     * @param systemUserDto
     * @return
     */
    SystemUserVo update(SystemUserDto systemUserDto);
}

